package pe.com.bbva.modpre.persistencia.hibernate;

import java.util.List;
import java.util.Map;

import org.hibernate.SessionFactory;
import org.hibernate.criterion.Order;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import pe.com.bbva.modpre.dominio.Opcion;
import pe.com.bbva.modpre.dominio.Rol;
import pe.com.bbva.modpre.dominio.Valor;
import pe.com.bbva.modpre.persistencia.OpcionDAO;
import pe.com.bbva.modpre.utileria.Busqueda;
import pe.com.bbva.modpre.utileria.ModpreUtil;

@Repository
@SuppressWarnings("serial")
public class OpcionHibernate extends BaseHibernate<Opcion, Long> 
	implements OpcionDAO {
	
	@Autowired
	public OpcionHibernate(SessionFactory sessionFactory){
		setSessionFactory(sessionFactory);
	}

	@Override
	public List<Opcion> obtenerOpcionesxRol(Rol rol) {
		return buscarHql("select p.opcion from Permiso p where p.rol.id=? and p.estado.codigo=? "+
				"order by p.opcion.padre desc, p.opcion.orden", 
				rol.getId(), Valor.CODIGO.ACTIVO);
	}

	@Override
	public Map<String, List<Opcion>> listarOpciones() {
		Busqueda filtro = Busqueda.forClass(Opcion.class);
        filtro.addOrder(Order.asc("id"));
        filtro.addOrder(Order.asc("padre"));
        filtro.addOrder(Order.asc("orden"));
        
        List<Opcion> opciones = buscar(filtro);
        
        return ModpreUtil.ordenarOpciones(opciones);
	}

}
